const fs = require('fs');
const path = require('path');
const { query } = require('../lib/db');

async function createDepartments() {
  try {
    console.log('开始创建departments表...');

    // 创建departments表
    await query(`
      CREATE TABLE IF NOT EXISTS \`departments\` (
        \`id\` int(11) NOT NULL AUTO_INCREMENT COMMENT '部门ID',
        \`name\` varchar(100) NOT NULL COMMENT '部门名称',
        \`code\` varchar(50) NOT NULL COMMENT '部门代码',
        \`parent_id\` int(11) NULL COMMENT '父部门ID',
        \`ancestors\` varchar(500) NULL COMMENT '祖先路径，如1,2,5表示完整层级路径',
        \`status\` tinyint(1) DEFAULT 1 COMMENT '状态 1-启用 0-禁用',
        \`sort_order\` int(11) DEFAULT 0 COMMENT '排序序号',
        \`description\` text COMMENT '部门描述',
        \`contact_phone\` varchar(20) COMMENT '联系电话',
        \`location\` varchar(200) COMMENT '部门位置',
        \`budget\` decimal(15,2) COMMENT '部门预算',
        \`created_at\` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
        \`updated_at\` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
        PRIMARY KEY (\`id\`),
        UNIQUE KEY \`uk_code\` (\`code\`),
        KEY \`idx_parent_id\` (\`parent_id\`),
        KEY \`idx_status\` (\`status\`),
        KEY \`idx_ancestors\` (\`ancestors\`),
        KEY \`idx_sort_order\` (\`sort_order\`),
        CONSTRAINT \`fk_departments_parent\` FOREIGN KEY (\`parent_id\`) REFERENCES \`departments\`(\`id\`) ON DELETE CASCADE
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='部门表'
    `);
    console.log('✅ departments表创建成功');

    // 检查是否已有数据
    const existingDepts = await query('SELECT COUNT(*) as count FROM departments');
    if (existingDepts[0].count > 0) {
      console.log('🔄 departments表已有数据，跳过数据插入');
      return;
    }

    // 插入根级部门
    console.log('插入根级部门...');
    await query(`
      INSERT INTO \`departments\` (\`name\`, \`code\`, \`parent_id\`, \`ancestors\`, \`status\`, \`sort_order\`, \`description\`, \`location\`) VALUES
      ('总公司', 'ROOT', NULL, '', 1, 1, '公司总部', '北京市朝阳区'),
      ('技术部门', 'TECH', 1, '1', 1, 1, '负责技术开发和维护', '北京市朝阳区A座'),
      ('业务部门', 'BUSINESS', 1, '1', 1, 2, '负责业务运营和客户服务', '北京市朝阳区B座'),
      ('行政部门', 'ADMIN', 1, '1', 1, 3, '负责行政管理和人力资源', '北京市朝阳区C座')
    `);

    // 插入技术部门子部门
    console.log('插入技术部门子部门...');
    await query(`
      INSERT INTO \`departments\` (\`name\`, \`code\`, \`parent_id\`, \`ancestors\`, \`status\`, \`sort_order\`, \`description\`, \`location\`) VALUES
      ('IT部门', 'IT', 2, '1,2', 1, 1, '信息技术支持和系统维护', '北京市朝阳区A座5楼'),
      ('开发部', 'DEV', 2, '1,2', 1, 2, '软件开发和产品研发', '北京市朝阳区A座6楼'),
      ('测试部', 'QA', 2, '1,2', 1, 3, '软件测试和质量保证', '北京市朝阳区A座7楼'),
      ('运维部', 'OPS', 2, '1,2', 1, 4, '系统运维和基础设施', '北京市朝阳区A座8楼')
    `);

    // 插入业务部门子部门  
    console.log('插入业务部门子部门...');
    await query(`
      INSERT INTO \`departments\` (\`name\`, \`code\`, \`parent_id\`, \`ancestors\`, \`status\`, \`sort_order\`, \`description\`, \`location\`) VALUES
      ('销售部', 'SALES', 3, '1,3', 1, 1, '产品销售和客户拓展', '北京市朝阳区B座5楼'),
      ('客服部', 'SERVICE', 3, '1,3', 1, 2, '客户服务和支持', '北京市朝阳区B座6楼'),
      ('市场部', 'MARKET', 3, '1,3', 1, 3, '市场推广和品牌建设', '北京市朝阳区B座7楼')
    `);

    // 插入行政部门子部门
    console.log('插入行政部门子部门...');
    await query(`
      INSERT INTO \`departments\` (\`name\`, \`code\`, \`parent_id\`, \`ancestors\`, \`status\`, \`sort_order\`, \`description\`, \`location\`) VALUES
      ('人事部', 'HR', 4, '1,4', 1, 1, '人力资源管理', '北京市朝阳区C座5楼'),
      ('财务部', 'FINANCE', 4, '1,4', 1, 2, '财务管理和会计', '北京市朝阳区C座6楼'),
      ('法务部', 'LEGAL', 4, '1,4', 1, 3, '法律事务和合规', '北京市朝阳区C座7楼')
    `);

    console.log('✅ 示例数据插入成功');

    // 查询验证数据
    const departments = await query('SELECT id, name, code, parent_id, ancestors FROM departments ORDER BY sort_order');
    console.log('📋 已创建的部门：');
    departments.forEach(dept => {
      console.log(`  ${dept.id}: ${dept.name} (${dept.code}) - 父级: ${dept.parent_id || '无'}, 路径: ${dept.ancestors || '根'}`);
    });

  } catch (error) {
    console.error('❌ 创建departments表时发生错误:', error);
    throw error;
  }
}

// 执行脚本
createDepartments()
  .then(() => {
    console.log('🎉 departments表创建完成!');
    process.exit(0);
  })
  .catch(error => {
    console.error('脚本执行失败:', error);
    process.exit(1);
  });